import { Module } from '@nestjs/common';
import { AppController } from './app/app.controller';
import { AppService } from './app/app.service';
import { GlobalConfigModule } from './app/global-config.module';
import { CatModule } from './cat/cat.module';
import { UuidModule } from './common/module/staticModule/uuid/uuid.module'; // 静态模块示例：从 common 目录导入
import { CacheModule } from './common/module/dynamicModule/cache/cache.module'; // 动态模块示例（common 目录）：通过 register 传入配置

/**
 * 应用根模块
 *
 * 职责：
 * 1. 组织和管理应用级别的模块、控制器和服务
 * 2. 导入全局配置模块（GlobalConfigModule）提供全局配置
 * 3. 导入功能模块（如 CatModule）组织业务逻辑
 *
 * 模块导入顺序说明：
 * - GlobalConfigModule 必须先导入，因为它提供全局配置
 * - CatModule 依赖全局配置，所以在后面导入
 */
@Module({
	imports: [
		GlobalConfigModule, // 全局配置模块，提供 GLOBAL_CONFIG 和 HTTP_OPTIONS
		UuidModule, // 静态工具模块：提供 UuidService
		CacheModule.register({
			// 动态模块：此处演示同步配置注册
			prefix: 'app',
			defaultTtl: 30, // 默认缓存 30 秒
			maxItems: 500,
		}),
		CatModule, // 业务功能模块（依赖上面的全局/工具/缓存能力）
	],
	controllers: [
		AppController, // 应用级别的控制器
	],
	providers: [
		AppService, // 应用级别的服务
	],
})
export class AppModule {
	/**
	 * 根模块构造函数
	 * 可以在这里进行应用级别的初始化工作
	 */
	constructor() {
		console.log('🚀 NestJS 应用根模块初始化完成');
		console.log('📦 已导入模块: CatModule');
	}
}
